/*
 * Copyright 2018 Google
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/firestore/v1beta1/query.proto

#include "google/firestore/v1beta1/query.pb.h"

#include <algorithm>

#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/port.h>
#include <google/protobuf/stubs/once.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/wire_format_lite_inl.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// This is a temporary google only hack
#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
#include "third_party/protobuf/version.h"
#endif
// @@protoc_insertion_point(includes)
namespace google {
namespace firestore {
namespace v1beta1 {
class StructuredQuery_CollectionSelectorDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_CollectionSelector>
      _instance;
} _StructuredQuery_CollectionSelector_default_instance_;
class StructuredQuery_FilterDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_Filter>
      _instance;
  const ::google::firestore::v1beta1::StructuredQuery_CompositeFilter* composite_filter_;
  const ::google::firestore::v1beta1::StructuredQuery_FieldFilter* field_filter_;
  const ::google::firestore::v1beta1::StructuredQuery_UnaryFilter* unary_filter_;
} _StructuredQuery_Filter_default_instance_;
class StructuredQuery_CompositeFilterDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_CompositeFilter>
      _instance;
} _StructuredQuery_CompositeFilter_default_instance_;
class StructuredQuery_FieldFilterDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_FieldFilter>
      _instance;
} _StructuredQuery_FieldFilter_default_instance_;
class StructuredQuery_UnaryFilterDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_UnaryFilter>
      _instance;
  const ::google::firestore::v1beta1::StructuredQuery_FieldReference* field_;
} _StructuredQuery_UnaryFilter_default_instance_;
class StructuredQuery_OrderDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_Order>
      _instance;
} _StructuredQuery_Order_default_instance_;
class StructuredQuery_FieldReferenceDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_FieldReference>
      _instance;
} _StructuredQuery_FieldReference_default_instance_;
class StructuredQuery_ProjectionDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery_Projection>
      _instance;
} _StructuredQuery_Projection_default_instance_;
class StructuredQueryDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<StructuredQuery>
      _instance;
} _StructuredQuery_default_instance_;
class CursorDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<Cursor>
      _instance;
} _Cursor_default_instance_;
}  // namespace v1beta1
}  // namespace firestore
}  // namespace google
namespace protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto {
void InitDefaultsStructuredQuery_CollectionSelectorImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_CollectionSelector_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_CollectionSelector();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery_CollectionSelector::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery_CollectionSelector() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQuery_CollectionSelectorImpl);
}

void InitDefaultsStructuredQuery_CompositeFilterImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldFilter();
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_UnaryFilter();
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_Filter_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_Filter();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_CompositeFilter_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_CompositeFilter();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery_Filter::InitAsDefaultInstance();
  ::google::firestore::v1beta1::StructuredQuery_CompositeFilter::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery_CompositeFilter() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQuery_CompositeFilterImpl);
}

void InitDefaultsStructuredQuery_FieldFilterImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldReference();
  protobuf_google_2ffirestore_2fv1beta1_2fdocument_2eproto::InitDefaultsArrayValue();
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_FieldFilter_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_FieldFilter();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery_FieldFilter::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery_FieldFilter() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQuery_FieldFilterImpl);
}

void InitDefaultsStructuredQuery_UnaryFilterImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldReference();
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_UnaryFilter_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_UnaryFilter();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery_UnaryFilter::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery_UnaryFilter() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQuery_UnaryFilterImpl);
}

void InitDefaultsStructuredQuery_OrderImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldReference();
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_Order_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_Order();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery_Order::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery_Order() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQuery_OrderImpl);
}

void InitDefaultsStructuredQuery_FieldReferenceImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_FieldReference_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_FieldReference();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery_FieldReference::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery_FieldReference() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQuery_FieldReferenceImpl);
}

void InitDefaultsStructuredQuery_ProjectionImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldReference();
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_Projection_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery_Projection();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery_Projection::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery_Projection() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQuery_ProjectionImpl);
}

void InitDefaultsStructuredQueryImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_Projection();
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CollectionSelector();
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CompositeFilter();
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_Order();
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsCursor();
  protobuf_google_2fprotobuf_2fwrappers_2eproto::InitDefaultsInt32Value();
  {
    void* ptr = &::google::firestore::v1beta1::_StructuredQuery_default_instance_;
    new (ptr) ::google::firestore::v1beta1::StructuredQuery();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::StructuredQuery::InitAsDefaultInstance();
}

void InitDefaultsStructuredQuery() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsStructuredQueryImpl);
}

void InitDefaultsCursorImpl() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  ::google::protobuf::internal::InitProtobufDefaultsForceUnique();
#else
  ::google::protobuf::internal::InitProtobufDefaults();
#endif  // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
  protobuf_google_2ffirestore_2fv1beta1_2fdocument_2eproto::InitDefaultsArrayValue();
  {
    void* ptr = &::google::firestore::v1beta1::_Cursor_default_instance_;
    new (ptr) ::google::firestore::v1beta1::Cursor();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1beta1::Cursor::InitAsDefaultInstance();
}

void InitDefaultsCursor() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsCursorImpl);
}

::google::protobuf::Metadata file_level_metadata[10];
const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[4];

const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_CollectionSelector, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_CollectionSelector, collection_id_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_CollectionSelector, all_descendants_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Filter, _internal_metadata_),
  ~0u,  // no _extensions_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Filter, _oneof_case_[0]),
  ~0u,  // no _weak_field_map_
  offsetof(::google::firestore::v1beta1::StructuredQuery_FilterDefaultTypeInternal, composite_filter_),
  offsetof(::google::firestore::v1beta1::StructuredQuery_FilterDefaultTypeInternal, field_filter_),
  offsetof(::google::firestore::v1beta1::StructuredQuery_FilterDefaultTypeInternal, unary_filter_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Filter, filter_type_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_CompositeFilter, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_CompositeFilter, op_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_CompositeFilter, filters_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_FieldFilter, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_FieldFilter, field_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_FieldFilter, op_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_FieldFilter, value_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_UnaryFilter, _internal_metadata_),
  ~0u,  // no _extensions_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_UnaryFilter, _oneof_case_[0]),
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_UnaryFilter, op_),
  offsetof(::google::firestore::v1beta1::StructuredQuery_UnaryFilterDefaultTypeInternal, field_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_UnaryFilter, operand_type_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Order, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Order, field_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Order, direction_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_FieldReference, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_FieldReference, field_path_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Projection, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery_Projection, fields_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, select_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, from_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, where_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, order_by_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, start_at_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, end_at_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, offset_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::StructuredQuery, limit_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::Cursor, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::Cursor, values_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::google::firestore::v1beta1::Cursor, before_),
};
static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  { 0, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_CollectionSelector)},
  { 7, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_Filter)},
  { 16, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_CompositeFilter)},
  { 23, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_FieldFilter)},
  { 31, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_UnaryFilter)},
  { 39, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_Order)},
  { 46, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_FieldReference)},
  { 52, -1, sizeof(::google::firestore::v1beta1::StructuredQuery_Projection)},
  { 58, -1, sizeof(::google::firestore::v1beta1::StructuredQuery)},
  { 71, -1, sizeof(::google::firestore::v1beta1::Cursor)},
};

static ::google::protobuf::Message const * const file_default_instances[] = {
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_CollectionSelector_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_Filter_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_CompositeFilter_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_FieldFilter_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_UnaryFilter_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_Order_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_FieldReference_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_Projection_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_StructuredQuery_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::google::firestore::v1beta1::_Cursor_default_instance_),
};

void protobuf_AssignDescriptors() {
  AddDescriptors();
  ::google::protobuf::MessageFactory* factory = NULL;
  AssignDescriptors(
      "google/firestore/v1beta1/query.proto", schemas, file_default_instances, TableStruct::offsets, factory,
      file_level_metadata, file_level_enum_descriptors, NULL);
}

void protobuf_AssignDescriptorsOnce() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &protobuf_AssignDescriptors);
}

void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD;
void protobuf_RegisterTypes(const ::std::string&) {
  protobuf_AssignDescriptorsOnce();
  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 10);
}

void AddDescriptorsImpl() {
  InitDefaults();
  static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
      "\n$google/firestore/v1beta1/query.proto\022\030"
      "google.firestore.v1beta1\032\034google/api/ann"
      "otations.proto\032\'google/firestore/v1beta1"
      "/document.proto\032\036google/protobuf/wrapper"
      "s.proto\"\271\017\n\017StructuredQuery\022D\n\006select\030\001 "
      "\001(\01324.google.firestore.v1beta1.Structure"
      "dQuery.Projection\022J\n\004from\030\002 \003(\0132<.google"
      ".firestore.v1beta1.StructuredQuery.Colle"
      "ctionSelector\022\?\n\005where\030\003 \001(\01320.google.fi"
      "restore.v1beta1.StructuredQuery.Filter\022A"
      "\n\010order_by\030\004 \003(\0132/.google.firestore.v1be"
      "ta1.StructuredQuery.Order\0222\n\010start_at\030\007 "
      "\001(\0132 .google.firestore.v1beta1.Cursor\0220\n"
      "\006end_at\030\010 \001(\0132 .google.firestore.v1beta1"
      ".Cursor\022\016\n\006offset\030\006 \001(\005\022*\n\005limit\030\005 \001(\0132\033"
      ".google.protobuf.Int32Value\032D\n\022Collectio"
      "nSelector\022\025\n\rcollection_id\030\002 \001(\t\022\027\n\017all_"
      "descendants\030\003 \001(\010\032\214\002\n\006Filter\022U\n\020composit"
      "e_filter\030\001 \001(\01329.google.firestore.v1beta"
      "1.StructuredQuery.CompositeFilterH\000\022M\n\014f"
      "ield_filter\030\002 \001(\01325.google.firestore.v1b"
      "eta1.StructuredQuery.FieldFilterH\000\022M\n\014un"
      "ary_filter\030\003 \001(\01325.google.firestore.v1be"
      "ta1.StructuredQuery.UnaryFilterH\000B\r\n\013fil"
      "ter_type\032\323\001\n\017CompositeFilter\022N\n\002op\030\001 \001(\016"
      "2B.google.firestore.v1beta1.StructuredQu"
      "ery.CompositeFilter.Operator\022A\n\007filters\030"
      "\002 \003(\01320.google.firestore.v1beta1.Structu"
      "redQuery.Filter\"-\n\010Operator\022\030\n\024OPERATOR_"
      "UNSPECIFIED\020\000\022\007\n\003AND\020\001\032\354\002\n\013FieldFilter\022G"
      "\n\005field\030\001 \001(\01328.google.firestore.v1beta1"
      ".StructuredQuery.FieldReference\022J\n\002op\030\002 "
      "\001(\0162>.google.firestore.v1beta1.Structure"
      "dQuery.FieldFilter.Operator\022.\n\005value\030\003 \001"
      "(\0132\037.google.firestore.v1beta1.Value\"\227\001\n\010"
      "Operator\022\030\n\024OPERATOR_UNSPECIFIED\020\000\022\r\n\tLE"
      "SS_THAN\020\001\022\026\n\022LESS_THAN_OR_EQUAL\020\002\022\020\n\014GRE"
      "ATER_THAN\020\003\022\031\n\025GREATER_THAN_OR_EQUAL\020\004\022\t"
      "\n\005EQUAL\020\005\022\022\n\016ARRAY_CONTAINS\020\007\032\363\001\n\013UnaryF"
      "ilter\022J\n\002op\030\001 \001(\0162>.google.firestore.v1b"
      "eta1.StructuredQuery.UnaryFilter.Operato"
      "r\022I\n\005field\030\002 \001(\01328.google.firestore.v1be"
      "ta1.StructuredQuery.FieldReferenceH\000\"=\n\010"
      "Operator\022\030\n\024OPERATOR_UNSPECIFIED\020\000\022\n\n\006IS"
      "_NAN\020\002\022\013\n\007IS_NULL\020\003B\016\n\014operand_type\032\230\001\n\005"
      "Order\022G\n\005field\030\001 \001(\01328.google.firestore."
      "v1beta1.StructuredQuery.FieldReference\022F"
      "\n\tdirection\030\002 \001(\01623.google.firestore.v1b"
      "eta1.StructuredQuery.Direction\032$\n\016FieldR"
      "eference\022\022\n\nfield_path\030\002 \001(\t\032V\n\nProjecti"
      "on\022H\n\006fields\030\002 \003(\01328.google.firestore.v1"
      "beta1.StructuredQuery.FieldReference\"E\n\t"
      "Direction\022\031\n\025DIRECTION_UNSPECIFIED\020\000\022\r\n\t"
      "ASCENDING\020\001\022\016\n\nDESCENDING\020\002\"I\n\006Cursor\022/\n"
      "\006values\030\001 \003(\0132\037.google.firestore.v1beta1"
      ".Value\022\016\n\006before\030\002 \001(\010B\270\001\n\034com.google.fi"
      "restore.v1beta1B\nQueryProtoP\001ZAgoogle.go"
      "lang.org/genproto/googleapis/firestore/v"
      "1beta1;firestore\242\002\004GCFS\252\002\036Google.Cloud.F"
      "irestore.V1Beta1\312\002\036Google\\Cloud\\Firestor"
      "e\\V1beta1b\006proto3"
  };
  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
      descriptor, 2417);
  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
    "google/firestore/v1beta1/query.proto", &protobuf_RegisterTypes);
  ::protobuf_google_2fapi_2fannotations_2eproto::AddDescriptors();
  ::protobuf_google_2ffirestore_2fv1beta1_2fdocument_2eproto::AddDescriptors();
  ::protobuf_google_2fprotobuf_2fwrappers_2eproto::AddDescriptors();
}

void AddDescriptors() {
  static GOOGLE_PROTOBUF_DECLARE_ONCE(once);
  ::google::protobuf::GoogleOnceInit(&once, &AddDescriptorsImpl);
}
// Force AddDescriptors() to be called at dynamic initialization time.
struct StaticDescriptorInitializer {
  StaticDescriptorInitializer() {
    AddDescriptors();
  }
} static_descriptor_initializer;
}  // namespace protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto
namespace google {
namespace firestore {
namespace v1beta1 {
const ::google::protobuf::EnumDescriptor* StructuredQuery_CompositeFilter_Operator_descriptor() {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_enum_descriptors[0];
}
bool StructuredQuery_CompositeFilter_Operator_IsValid(int value) {
  switch (value) {
    case 0:
    case 1:
      return true;
    default:
      return false;
  }
}

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const StructuredQuery_CompositeFilter_Operator StructuredQuery_CompositeFilter::OPERATOR_UNSPECIFIED;
const StructuredQuery_CompositeFilter_Operator StructuredQuery_CompositeFilter::AND;
const StructuredQuery_CompositeFilter_Operator StructuredQuery_CompositeFilter::Operator_MIN;
const StructuredQuery_CompositeFilter_Operator StructuredQuery_CompositeFilter::Operator_MAX;
const int StructuredQuery_CompositeFilter::Operator_ARRAYSIZE;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
const ::google::protobuf::EnumDescriptor* StructuredQuery_FieldFilter_Operator_descriptor() {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_enum_descriptors[1];
}
bool StructuredQuery_FieldFilter_Operator_IsValid(int value) {
  switch (value) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 7:
      return true;
    default:
      return false;
  }
}

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::OPERATOR_UNSPECIFIED;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::LESS_THAN;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::LESS_THAN_OR_EQUAL;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::GREATER_THAN;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::GREATER_THAN_OR_EQUAL;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::EQUAL;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::ARRAY_CONTAINS;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::Operator_MIN;
const StructuredQuery_FieldFilter_Operator StructuredQuery_FieldFilter::Operator_MAX;
const int StructuredQuery_FieldFilter::Operator_ARRAYSIZE;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
const ::google::protobuf::EnumDescriptor* StructuredQuery_UnaryFilter_Operator_descriptor() {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_enum_descriptors[2];
}
bool StructuredQuery_UnaryFilter_Operator_IsValid(int value) {
  switch (value) {
    case 0:
    case 2:
    case 3:
      return true;
    default:
      return false;
  }
}

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter::OPERATOR_UNSPECIFIED;
const StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter::IS_NAN;
const StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter::IS_NULL;
const StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter::Operator_MIN;
const StructuredQuery_UnaryFilter_Operator StructuredQuery_UnaryFilter::Operator_MAX;
const int StructuredQuery_UnaryFilter::Operator_ARRAYSIZE;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
const ::google::protobuf::EnumDescriptor* StructuredQuery_Direction_descriptor() {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_enum_descriptors[3];
}
bool StructuredQuery_Direction_IsValid(int value) {
  switch (value) {
    case 0:
    case 1:
    case 2:
      return true;
    default:
      return false;
  }
}

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const StructuredQuery_Direction StructuredQuery::DIRECTION_UNSPECIFIED;
const StructuredQuery_Direction StructuredQuery::ASCENDING;
const StructuredQuery_Direction StructuredQuery::DESCENDING;
const StructuredQuery_Direction StructuredQuery::Direction_MIN;
const StructuredQuery_Direction StructuredQuery::Direction_MAX;
const int StructuredQuery::Direction_ARRAYSIZE;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

// ===================================================================

void StructuredQuery_CollectionSelector::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_CollectionSelector::kCollectionIdFieldNumber;
const int StructuredQuery_CollectionSelector::kAllDescendantsFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_CollectionSelector::StructuredQuery_CollectionSelector()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CollectionSelector();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
}
StructuredQuery_CollectionSelector::StructuredQuery_CollectionSelector(const StructuredQuery_CollectionSelector& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  collection_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.collection_id().size() > 0) {
    collection_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.collection_id_);
  }
  all_descendants_ = from.all_descendants_;
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
}

void StructuredQuery_CollectionSelector::SharedCtor() {
  collection_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  all_descendants_ = false;
  _cached_size_ = 0;
}

StructuredQuery_CollectionSelector::~StructuredQuery_CollectionSelector() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  SharedDtor();
}

void StructuredQuery_CollectionSelector::SharedDtor() {
  collection_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void StructuredQuery_CollectionSelector::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_CollectionSelector::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_CollectionSelector& StructuredQuery_CollectionSelector::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CollectionSelector();
  return *internal_default_instance();
}

StructuredQuery_CollectionSelector* StructuredQuery_CollectionSelector::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_CollectionSelector* n = new StructuredQuery_CollectionSelector;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_CollectionSelector::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  collection_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  all_descendants_ = false;
  _internal_metadata_.Clear();
}

bool StructuredQuery_CollectionSelector::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // string collection_id = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_collection_id()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->collection_id().data(), static_cast<int>(this->collection_id().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // bool all_descendants = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &all_descendants_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  return false;
#undef DO_
}

void StructuredQuery_CollectionSelector::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // string collection_id = 2;
  if (this->collection_id().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->collection_id().data(), static_cast<int>(this->collection_id().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      2, this->collection_id(), output);
  }

  // bool all_descendants = 3;
  if (this->all_descendants() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(3, this->all_descendants(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
}

::google::protobuf::uint8* StructuredQuery_CollectionSelector::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // string collection_id = 2;
  if (this->collection_id().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->collection_id().data(), static_cast<int>(this->collection_id().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "google.firestore.v1beta1.StructuredQuery.CollectionSelector.collection_id");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        2, this->collection_id(), target);
  }

  // bool all_descendants = 3;
  if (this->all_descendants() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(3, this->all_descendants(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  return target;
}

size_t StructuredQuery_CollectionSelector::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // string collection_id = 2;
  if (this->collection_id().size() > 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::StringSize(
        this->collection_id());
  }

  // bool all_descendants = 3;
  if (this->all_descendants() != 0) {
    total_size += 1 + 1;
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_CollectionSelector::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_CollectionSelector* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_CollectionSelector>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
    MergeFrom(*source);
  }
}

void StructuredQuery_CollectionSelector::MergeFrom(const StructuredQuery_CollectionSelector& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.collection_id().size() > 0) {

    collection_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.collection_id_);
  }
  if (from.all_descendants() != 0) {
    set_all_descendants(from.all_descendants());
  }
}

void StructuredQuery_CollectionSelector::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_CollectionSelector::CopyFrom(const StructuredQuery_CollectionSelector& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.CollectionSelector)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_CollectionSelector::IsInitialized() const {
  return true;
}

void StructuredQuery_CollectionSelector::Swap(StructuredQuery_CollectionSelector* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_CollectionSelector::InternalSwap(StructuredQuery_CollectionSelector* other) {
  using std::swap;
  collection_id_.Swap(&other->collection_id_);
  swap(all_descendants_, other->all_descendants_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_CollectionSelector::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery_Filter::InitAsDefaultInstance() {
  ::google::firestore::v1beta1::_StructuredQuery_Filter_default_instance_.composite_filter_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_CompositeFilter*>(
      ::google::firestore::v1beta1::StructuredQuery_CompositeFilter::internal_default_instance());
  ::google::firestore::v1beta1::_StructuredQuery_Filter_default_instance_.field_filter_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_FieldFilter*>(
      ::google::firestore::v1beta1::StructuredQuery_FieldFilter::internal_default_instance());
  ::google::firestore::v1beta1::_StructuredQuery_Filter_default_instance_.unary_filter_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_UnaryFilter*>(
      ::google::firestore::v1beta1::StructuredQuery_UnaryFilter::internal_default_instance());
}
void StructuredQuery_Filter::set_allocated_composite_filter(::google::firestore::v1beta1::StructuredQuery_CompositeFilter* composite_filter) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  clear_filter_type();
  if (composite_filter) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      composite_filter = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, composite_filter, submessage_arena);
    }
    set_has_composite_filter();
    filter_type_.composite_filter_ = composite_filter;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.Filter.composite_filter)
}
void StructuredQuery_Filter::set_allocated_field_filter(::google::firestore::v1beta1::StructuredQuery_FieldFilter* field_filter) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  clear_filter_type();
  if (field_filter) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      field_filter = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, field_filter, submessage_arena);
    }
    set_has_field_filter();
    filter_type_.field_filter_ = field_filter;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.Filter.field_filter)
}
void StructuredQuery_Filter::set_allocated_unary_filter(::google::firestore::v1beta1::StructuredQuery_UnaryFilter* unary_filter) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  clear_filter_type();
  if (unary_filter) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      unary_filter = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, unary_filter, submessage_arena);
    }
    set_has_unary_filter();
    filter_type_.unary_filter_ = unary_filter;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.Filter.unary_filter)
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_Filter::kCompositeFilterFieldNumber;
const int StructuredQuery_Filter::kFieldFilterFieldNumber;
const int StructuredQuery_Filter::kUnaryFilterFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_Filter::StructuredQuery_Filter()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CompositeFilter();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.Filter)
}
StructuredQuery_Filter::StructuredQuery_Filter(const StructuredQuery_Filter& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  clear_has_filter_type();
  switch (from.filter_type_case()) {
    case kCompositeFilter: {
      mutable_composite_filter()->::google::firestore::v1beta1::StructuredQuery_CompositeFilter::MergeFrom(from.composite_filter());
      break;
    }
    case kFieldFilter: {
      mutable_field_filter()->::google::firestore::v1beta1::StructuredQuery_FieldFilter::MergeFrom(from.field_filter());
      break;
    }
    case kUnaryFilter: {
      mutable_unary_filter()->::google::firestore::v1beta1::StructuredQuery_UnaryFilter::MergeFrom(from.unary_filter());
      break;
    }
    case FILTER_TYPE_NOT_SET: {
      break;
    }
  }
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.Filter)
}

void StructuredQuery_Filter::SharedCtor() {
  clear_has_filter_type();
  _cached_size_ = 0;
}

StructuredQuery_Filter::~StructuredQuery_Filter() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.Filter)
  SharedDtor();
}

void StructuredQuery_Filter::SharedDtor() {
  if (has_filter_type()) {
    clear_filter_type();
  }
}

void StructuredQuery_Filter::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_Filter::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_Filter& StructuredQuery_Filter::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CompositeFilter();
  return *internal_default_instance();
}

StructuredQuery_Filter* StructuredQuery_Filter::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_Filter* n = new StructuredQuery_Filter;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_Filter::clear_filter_type() {
// @@protoc_insertion_point(one_of_clear_start:google.firestore.v1beta1.StructuredQuery.Filter)
  switch (filter_type_case()) {
    case kCompositeFilter: {
      delete filter_type_.composite_filter_;
      break;
    }
    case kFieldFilter: {
      delete filter_type_.field_filter_;
      break;
    }
    case kUnaryFilter: {
      delete filter_type_.unary_filter_;
      break;
    }
    case FILTER_TYPE_NOT_SET: {
      break;
    }
  }
  _oneof_case_[0] = FILTER_TYPE_NOT_SET;
}


void StructuredQuery_Filter::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.Filter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  clear_filter_type();
  _internal_metadata_.Clear();
}

bool StructuredQuery_Filter::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.Filter)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.firestore.v1beta1.StructuredQuery.CompositeFilter composite_filter = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_composite_filter()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.StructuredQuery.FieldFilter field_filter = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_field_filter()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.StructuredQuery.UnaryFilter unary_filter = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_unary_filter()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.Filter)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.Filter)
  return false;
#undef DO_
}

void StructuredQuery_Filter::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.Filter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.CompositeFilter composite_filter = 1;
  if (has_composite_filter()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, *filter_type_.composite_filter_, output);
  }

  // .google.firestore.v1beta1.StructuredQuery.FieldFilter field_filter = 2;
  if (has_field_filter()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, *filter_type_.field_filter_, output);
  }

  // .google.firestore.v1beta1.StructuredQuery.UnaryFilter unary_filter = 3;
  if (has_unary_filter()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      3, *filter_type_.unary_filter_, output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.Filter)
}

::google::protobuf::uint8* StructuredQuery_Filter::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.Filter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.CompositeFilter composite_filter = 1;
  if (has_composite_filter()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, *filter_type_.composite_filter_, deterministic, target);
  }

  // .google.firestore.v1beta1.StructuredQuery.FieldFilter field_filter = 2;
  if (has_field_filter()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, *filter_type_.field_filter_, deterministic, target);
  }

  // .google.firestore.v1beta1.StructuredQuery.UnaryFilter unary_filter = 3;
  if (has_unary_filter()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        3, *filter_type_.unary_filter_, deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.Filter)
  return target;
}

size_t StructuredQuery_Filter::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.Filter)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  switch (filter_type_case()) {
    // .google.firestore.v1beta1.StructuredQuery.CompositeFilter composite_filter = 1;
    case kCompositeFilter: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *filter_type_.composite_filter_);
      break;
    }
    // .google.firestore.v1beta1.StructuredQuery.FieldFilter field_filter = 2;
    case kFieldFilter: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *filter_type_.field_filter_);
      break;
    }
    // .google.firestore.v1beta1.StructuredQuery.UnaryFilter unary_filter = 3;
    case kUnaryFilter: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *filter_type_.unary_filter_);
      break;
    }
    case FILTER_TYPE_NOT_SET: {
      break;
    }
  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_Filter::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.Filter)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_Filter* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_Filter>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.Filter)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.Filter)
    MergeFrom(*source);
  }
}

void StructuredQuery_Filter::MergeFrom(const StructuredQuery_Filter& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.Filter)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  switch (from.filter_type_case()) {
    case kCompositeFilter: {
      mutable_composite_filter()->::google::firestore::v1beta1::StructuredQuery_CompositeFilter::MergeFrom(from.composite_filter());
      break;
    }
    case kFieldFilter: {
      mutable_field_filter()->::google::firestore::v1beta1::StructuredQuery_FieldFilter::MergeFrom(from.field_filter());
      break;
    }
    case kUnaryFilter: {
      mutable_unary_filter()->::google::firestore::v1beta1::StructuredQuery_UnaryFilter::MergeFrom(from.unary_filter());
      break;
    }
    case FILTER_TYPE_NOT_SET: {
      break;
    }
  }
}

void StructuredQuery_Filter::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.Filter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_Filter::CopyFrom(const StructuredQuery_Filter& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.Filter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_Filter::IsInitialized() const {
  return true;
}

void StructuredQuery_Filter::Swap(StructuredQuery_Filter* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_Filter::InternalSwap(StructuredQuery_Filter* other) {
  using std::swap;
  swap(filter_type_, other->filter_type_);
  swap(_oneof_case_[0], other->_oneof_case_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_Filter::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery_CompositeFilter::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_CompositeFilter::kOpFieldNumber;
const int StructuredQuery_CompositeFilter::kFiltersFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_CompositeFilter::StructuredQuery_CompositeFilter()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CompositeFilter();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
}
StructuredQuery_CompositeFilter::StructuredQuery_CompositeFilter(const StructuredQuery_CompositeFilter& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      filters_(from.filters_),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  op_ = from.op_;
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
}

void StructuredQuery_CompositeFilter::SharedCtor() {
  op_ = 0;
  _cached_size_ = 0;
}

StructuredQuery_CompositeFilter::~StructuredQuery_CompositeFilter() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  SharedDtor();
}

void StructuredQuery_CompositeFilter::SharedDtor() {
}

void StructuredQuery_CompositeFilter::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_CompositeFilter::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_CompositeFilter& StructuredQuery_CompositeFilter::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_CompositeFilter();
  return *internal_default_instance();
}

StructuredQuery_CompositeFilter* StructuredQuery_CompositeFilter::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_CompositeFilter* n = new StructuredQuery_CompositeFilter;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_CompositeFilter::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  filters_.Clear();
  op_ = 0;
  _internal_metadata_.Clear();
}

bool StructuredQuery_CompositeFilter::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.firestore.v1beta1.StructuredQuery.CompositeFilter.Operator op = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_op(static_cast< ::google::firestore::v1beta1::StructuredQuery_CompositeFilter_Operator >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.firestore.v1beta1.StructuredQuery.Filter filters = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_filters()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  return false;
#undef DO_
}

void StructuredQuery_CompositeFilter::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.CompositeFilter.Operator op = 1;
  if (this->op() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      1, this->op(), output);
  }

  // repeated .google.firestore.v1beta1.StructuredQuery.Filter filters = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->filters_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, this->filters(static_cast<int>(i)), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
}

::google::protobuf::uint8* StructuredQuery_CompositeFilter::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.CompositeFilter.Operator op = 1;
  if (this->op() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      1, this->op(), target);
  }

  // repeated .google.firestore.v1beta1.StructuredQuery.Filter filters = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->filters_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->filters(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  return target;
}

size_t StructuredQuery_CompositeFilter::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.firestore.v1beta1.StructuredQuery.Filter filters = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->filters_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->filters(static_cast<int>(i)));
    }
  }

  // .google.firestore.v1beta1.StructuredQuery.CompositeFilter.Operator op = 1;
  if (this->op() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->op());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_CompositeFilter::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_CompositeFilter* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_CompositeFilter>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
    MergeFrom(*source);
  }
}

void StructuredQuery_CompositeFilter::MergeFrom(const StructuredQuery_CompositeFilter& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  filters_.MergeFrom(from.filters_);
  if (from.op() != 0) {
    set_op(from.op());
  }
}

void StructuredQuery_CompositeFilter::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_CompositeFilter::CopyFrom(const StructuredQuery_CompositeFilter& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.CompositeFilter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_CompositeFilter::IsInitialized() const {
  return true;
}

void StructuredQuery_CompositeFilter::Swap(StructuredQuery_CompositeFilter* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_CompositeFilter::InternalSwap(StructuredQuery_CompositeFilter* other) {
  using std::swap;
  filters_.InternalSwap(&other->filters_);
  swap(op_, other->op_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_CompositeFilter::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery_FieldFilter::InitAsDefaultInstance() {
  ::google::firestore::v1beta1::_StructuredQuery_FieldFilter_default_instance_._instance.get_mutable()->field_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_FieldReference*>(
      ::google::firestore::v1beta1::StructuredQuery_FieldReference::internal_default_instance());
  ::google::firestore::v1beta1::_StructuredQuery_FieldFilter_default_instance_._instance.get_mutable()->value_ = const_cast< ::google::firestore::v1beta1::Value*>(
      ::google::firestore::v1beta1::Value::internal_default_instance());
}
void StructuredQuery_FieldFilter::clear_value() {
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_FieldFilter::kFieldFieldNumber;
const int StructuredQuery_FieldFilter::kOpFieldNumber;
const int StructuredQuery_FieldFilter::kValueFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_FieldFilter::StructuredQuery_FieldFilter()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldFilter();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.FieldFilter)
}
StructuredQuery_FieldFilter::StructuredQuery_FieldFilter(const StructuredQuery_FieldFilter& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_field()) {
    field_ = new ::google::firestore::v1beta1::StructuredQuery_FieldReference(*from.field_);
  } else {
    field_ = NULL;
  }
  if (from.has_value()) {
    value_ = new ::google::firestore::v1beta1::Value(*from.value_);
  } else {
    value_ = NULL;
  }
  op_ = from.op_;
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.FieldFilter)
}

void StructuredQuery_FieldFilter::SharedCtor() {
  ::memset(&field_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&op_) -
      reinterpret_cast<char*>(&field_)) + sizeof(op_));
  _cached_size_ = 0;
}

StructuredQuery_FieldFilter::~StructuredQuery_FieldFilter() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  SharedDtor();
}

void StructuredQuery_FieldFilter::SharedDtor() {
  if (this != internal_default_instance()) delete field_;
  if (this != internal_default_instance()) delete value_;
}

void StructuredQuery_FieldFilter::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_FieldFilter::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_FieldFilter& StructuredQuery_FieldFilter::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldFilter();
  return *internal_default_instance();
}

StructuredQuery_FieldFilter* StructuredQuery_FieldFilter::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_FieldFilter* n = new StructuredQuery_FieldFilter;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_FieldFilter::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  if (GetArenaNoVirtual() == NULL && field_ != NULL) {
    delete field_;
  }
  field_ = NULL;
  if (GetArenaNoVirtual() == NULL && value_ != NULL) {
    delete value_;
  }
  value_ = NULL;
  op_ = 0;
  _internal_metadata_.Clear();
}

bool StructuredQuery_FieldFilter::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_field()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.StructuredQuery.FieldFilter.Operator op = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_op(static_cast< ::google::firestore::v1beta1::StructuredQuery_FieldFilter_Operator >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.Value value = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_value()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  return false;
#undef DO_
}

void StructuredQuery_FieldFilter::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  if (this->has_field()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, *this->field_, output);
  }

  // .google.firestore.v1beta1.StructuredQuery.FieldFilter.Operator op = 2;
  if (this->op() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      2, this->op(), output);
  }

  // .google.firestore.v1beta1.Value value = 3;
  if (this->has_value()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      3, *this->value_, output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.FieldFilter)
}

::google::protobuf::uint8* StructuredQuery_FieldFilter::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  if (this->has_field()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, *this->field_, deterministic, target);
  }

  // .google.firestore.v1beta1.StructuredQuery.FieldFilter.Operator op = 2;
  if (this->op() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      2, this->op(), target);
  }

  // .google.firestore.v1beta1.Value value = 3;
  if (this->has_value()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        3, *this->value_, deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  return target;
}

size_t StructuredQuery_FieldFilter::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  if (this->has_field()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->field_);
  }

  // .google.firestore.v1beta1.Value value = 3;
  if (this->has_value()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->value_);
  }

  // .google.firestore.v1beta1.StructuredQuery.FieldFilter.Operator op = 2;
  if (this->op() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->op());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_FieldFilter::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_FieldFilter* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_FieldFilter>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.FieldFilter)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.FieldFilter)
    MergeFrom(*source);
  }
}

void StructuredQuery_FieldFilter::MergeFrom(const StructuredQuery_FieldFilter& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_field()) {
    mutable_field()->::google::firestore::v1beta1::StructuredQuery_FieldReference::MergeFrom(from.field());
  }
  if (from.has_value()) {
    mutable_value()->::google::firestore::v1beta1::Value::MergeFrom(from.value());
  }
  if (from.op() != 0) {
    set_op(from.op());
  }
}

void StructuredQuery_FieldFilter::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_FieldFilter::CopyFrom(const StructuredQuery_FieldFilter& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.FieldFilter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_FieldFilter::IsInitialized() const {
  return true;
}

void StructuredQuery_FieldFilter::Swap(StructuredQuery_FieldFilter* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_FieldFilter::InternalSwap(StructuredQuery_FieldFilter* other) {
  using std::swap;
  swap(field_, other->field_);
  swap(value_, other->value_);
  swap(op_, other->op_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_FieldFilter::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery_UnaryFilter::InitAsDefaultInstance() {
  ::google::firestore::v1beta1::_StructuredQuery_UnaryFilter_default_instance_.field_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_FieldReference*>(
      ::google::firestore::v1beta1::StructuredQuery_FieldReference::internal_default_instance());
}
void StructuredQuery_UnaryFilter::set_allocated_field(::google::firestore::v1beta1::StructuredQuery_FieldReference* field) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  clear_operand_type();
  if (field) {
    ::google::protobuf::Arena* submessage_arena = NULL;
    if (message_arena != submessage_arena) {
      field = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, field, submessage_arena);
    }
    set_has_field();
    operand_type_.field_ = field;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1beta1.StructuredQuery.UnaryFilter.field)
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_UnaryFilter::kOpFieldNumber;
const int StructuredQuery_UnaryFilter::kFieldFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_UnaryFilter::StructuredQuery_UnaryFilter()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_UnaryFilter();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
}
StructuredQuery_UnaryFilter::StructuredQuery_UnaryFilter(const StructuredQuery_UnaryFilter& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  op_ = from.op_;
  clear_has_operand_type();
  switch (from.operand_type_case()) {
    case kField: {
      mutable_field()->::google::firestore::v1beta1::StructuredQuery_FieldReference::MergeFrom(from.field());
      break;
    }
    case OPERAND_TYPE_NOT_SET: {
      break;
    }
  }
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
}

void StructuredQuery_UnaryFilter::SharedCtor() {
  op_ = 0;
  clear_has_operand_type();
  _cached_size_ = 0;
}

StructuredQuery_UnaryFilter::~StructuredQuery_UnaryFilter() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  SharedDtor();
}

void StructuredQuery_UnaryFilter::SharedDtor() {
  if (has_operand_type()) {
    clear_operand_type();
  }
}

void StructuredQuery_UnaryFilter::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_UnaryFilter::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_UnaryFilter& StructuredQuery_UnaryFilter::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_UnaryFilter();
  return *internal_default_instance();
}

StructuredQuery_UnaryFilter* StructuredQuery_UnaryFilter::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_UnaryFilter* n = new StructuredQuery_UnaryFilter;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_UnaryFilter::clear_operand_type() {
// @@protoc_insertion_point(one_of_clear_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  switch (operand_type_case()) {
    case kField: {
      delete operand_type_.field_;
      break;
    }
    case OPERAND_TYPE_NOT_SET: {
      break;
    }
  }
  _oneof_case_[0] = OPERAND_TYPE_NOT_SET;
}


void StructuredQuery_UnaryFilter::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  op_ = 0;
  clear_operand_type();
  _internal_metadata_.Clear();
}

bool StructuredQuery_UnaryFilter::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.firestore.v1beta1.StructuredQuery.UnaryFilter.Operator op = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_op(static_cast< ::google::firestore::v1beta1::StructuredQuery_UnaryFilter_Operator >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_field()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  return false;
#undef DO_
}

void StructuredQuery_UnaryFilter::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.UnaryFilter.Operator op = 1;
  if (this->op() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      1, this->op(), output);
  }

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 2;
  if (has_field()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, *operand_type_.field_, output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
}

::google::protobuf::uint8* StructuredQuery_UnaryFilter::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.UnaryFilter.Operator op = 1;
  if (this->op() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      1, this->op(), target);
  }

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 2;
  if (has_field()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, *operand_type_.field_, deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  return target;
}

size_t StructuredQuery_UnaryFilter::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // .google.firestore.v1beta1.StructuredQuery.UnaryFilter.Operator op = 1;
  if (this->op() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->op());
  }

  switch (operand_type_case()) {
    // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 2;
    case kField: {
      total_size += 1 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *operand_type_.field_);
      break;
    }
    case OPERAND_TYPE_NOT_SET: {
      break;
    }
  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_UnaryFilter::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_UnaryFilter* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_UnaryFilter>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
    MergeFrom(*source);
  }
}

void StructuredQuery_UnaryFilter::MergeFrom(const StructuredQuery_UnaryFilter& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.op() != 0) {
    set_op(from.op());
  }
  switch (from.operand_type_case()) {
    case kField: {
      mutable_field()->::google::firestore::v1beta1::StructuredQuery_FieldReference::MergeFrom(from.field());
      break;
    }
    case OPERAND_TYPE_NOT_SET: {
      break;
    }
  }
}

void StructuredQuery_UnaryFilter::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_UnaryFilter::CopyFrom(const StructuredQuery_UnaryFilter& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.UnaryFilter)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_UnaryFilter::IsInitialized() const {
  return true;
}

void StructuredQuery_UnaryFilter::Swap(StructuredQuery_UnaryFilter* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_UnaryFilter::InternalSwap(StructuredQuery_UnaryFilter* other) {
  using std::swap;
  swap(op_, other->op_);
  swap(operand_type_, other->operand_type_);
  swap(_oneof_case_[0], other->_oneof_case_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_UnaryFilter::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery_Order::InitAsDefaultInstance() {
  ::google::firestore::v1beta1::_StructuredQuery_Order_default_instance_._instance.get_mutable()->field_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_FieldReference*>(
      ::google::firestore::v1beta1::StructuredQuery_FieldReference::internal_default_instance());
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_Order::kFieldFieldNumber;
const int StructuredQuery_Order::kDirectionFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_Order::StructuredQuery_Order()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_Order();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.Order)
}
StructuredQuery_Order::StructuredQuery_Order(const StructuredQuery_Order& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_field()) {
    field_ = new ::google::firestore::v1beta1::StructuredQuery_FieldReference(*from.field_);
  } else {
    field_ = NULL;
  }
  direction_ = from.direction_;
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.Order)
}

void StructuredQuery_Order::SharedCtor() {
  ::memset(&field_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&direction_) -
      reinterpret_cast<char*>(&field_)) + sizeof(direction_));
  _cached_size_ = 0;
}

StructuredQuery_Order::~StructuredQuery_Order() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.Order)
  SharedDtor();
}

void StructuredQuery_Order::SharedDtor() {
  if (this != internal_default_instance()) delete field_;
}

void StructuredQuery_Order::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_Order::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_Order& StructuredQuery_Order::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_Order();
  return *internal_default_instance();
}

StructuredQuery_Order* StructuredQuery_Order::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_Order* n = new StructuredQuery_Order;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_Order::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.Order)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  if (GetArenaNoVirtual() == NULL && field_ != NULL) {
    delete field_;
  }
  field_ = NULL;
  direction_ = 0;
  _internal_metadata_.Clear();
}

bool StructuredQuery_Order::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.Order)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_field()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.StructuredQuery.Direction direction = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_direction(static_cast< ::google::firestore::v1beta1::StructuredQuery_Direction >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.Order)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.Order)
  return false;
#undef DO_
}

void StructuredQuery_Order::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.Order)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  if (this->has_field()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, *this->field_, output);
  }

  // .google.firestore.v1beta1.StructuredQuery.Direction direction = 2;
  if (this->direction() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      2, this->direction(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.Order)
}

::google::protobuf::uint8* StructuredQuery_Order::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.Order)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  if (this->has_field()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, *this->field_, deterministic, target);
  }

  // .google.firestore.v1beta1.StructuredQuery.Direction direction = 2;
  if (this->direction() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      2, this->direction(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.Order)
  return target;
}

size_t StructuredQuery_Order::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.Order)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // .google.firestore.v1beta1.StructuredQuery.FieldReference field = 1;
  if (this->has_field()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->field_);
  }

  // .google.firestore.v1beta1.StructuredQuery.Direction direction = 2;
  if (this->direction() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->direction());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_Order::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.Order)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_Order* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_Order>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.Order)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.Order)
    MergeFrom(*source);
  }
}

void StructuredQuery_Order::MergeFrom(const StructuredQuery_Order& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.Order)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.has_field()) {
    mutable_field()->::google::firestore::v1beta1::StructuredQuery_FieldReference::MergeFrom(from.field());
  }
  if (from.direction() != 0) {
    set_direction(from.direction());
  }
}

void StructuredQuery_Order::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.Order)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_Order::CopyFrom(const StructuredQuery_Order& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.Order)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_Order::IsInitialized() const {
  return true;
}

void StructuredQuery_Order::Swap(StructuredQuery_Order* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_Order::InternalSwap(StructuredQuery_Order* other) {
  using std::swap;
  swap(field_, other->field_);
  swap(direction_, other->direction_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_Order::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery_FieldReference::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_FieldReference::kFieldPathFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_FieldReference::StructuredQuery_FieldReference()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldReference();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.FieldReference)
}
StructuredQuery_FieldReference::StructuredQuery_FieldReference(const StructuredQuery_FieldReference& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  field_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.field_path().size() > 0) {
    field_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.field_path_);
  }
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.FieldReference)
}

void StructuredQuery_FieldReference::SharedCtor() {
  field_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  _cached_size_ = 0;
}

StructuredQuery_FieldReference::~StructuredQuery_FieldReference() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.FieldReference)
  SharedDtor();
}

void StructuredQuery_FieldReference::SharedDtor() {
  field_path_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}

void StructuredQuery_FieldReference::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_FieldReference::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_FieldReference& StructuredQuery_FieldReference::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_FieldReference();
  return *internal_default_instance();
}

StructuredQuery_FieldReference* StructuredQuery_FieldReference::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_FieldReference* n = new StructuredQuery_FieldReference;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_FieldReference::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  field_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  _internal_metadata_.Clear();
}

bool StructuredQuery_FieldReference::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // string field_path = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_field_path()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->field_path().data(), static_cast<int>(this->field_path().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "google.firestore.v1beta1.StructuredQuery.FieldReference.field_path"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.FieldReference)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.FieldReference)
  return false;
#undef DO_
}

void StructuredQuery_FieldReference::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // string field_path = 2;
  if (this->field_path().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->field_path().data(), static_cast<int>(this->field_path().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "google.firestore.v1beta1.StructuredQuery.FieldReference.field_path");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      2, this->field_path(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.FieldReference)
}

::google::protobuf::uint8* StructuredQuery_FieldReference::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // string field_path = 2;
  if (this->field_path().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->field_path().data(), static_cast<int>(this->field_path().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "google.firestore.v1beta1.StructuredQuery.FieldReference.field_path");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        2, this->field_path(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.FieldReference)
  return target;
}

size_t StructuredQuery_FieldReference::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // string field_path = 2;
  if (this->field_path().size() > 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::StringSize(
        this->field_path());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_FieldReference::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_FieldReference* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_FieldReference>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.FieldReference)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.FieldReference)
    MergeFrom(*source);
  }
}

void StructuredQuery_FieldReference::MergeFrom(const StructuredQuery_FieldReference& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.field_path().size() > 0) {

    field_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.field_path_);
  }
}

void StructuredQuery_FieldReference::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_FieldReference::CopyFrom(const StructuredQuery_FieldReference& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.FieldReference)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_FieldReference::IsInitialized() const {
  return true;
}

void StructuredQuery_FieldReference::Swap(StructuredQuery_FieldReference* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_FieldReference::InternalSwap(StructuredQuery_FieldReference* other) {
  using std::swap;
  field_path_.Swap(&other->field_path_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_FieldReference::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery_Projection::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery_Projection::kFieldsFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery_Projection::StructuredQuery_Projection()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_Projection();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery.Projection)
}
StructuredQuery_Projection::StructuredQuery_Projection(const StructuredQuery_Projection& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      fields_(from.fields_),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery.Projection)
}

void StructuredQuery_Projection::SharedCtor() {
  _cached_size_ = 0;
}

StructuredQuery_Projection::~StructuredQuery_Projection() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery.Projection)
  SharedDtor();
}

void StructuredQuery_Projection::SharedDtor() {
}

void StructuredQuery_Projection::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery_Projection::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery_Projection& StructuredQuery_Projection::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery_Projection();
  return *internal_default_instance();
}

StructuredQuery_Projection* StructuredQuery_Projection::New(::google::protobuf::Arena* arena) const {
  StructuredQuery_Projection* n = new StructuredQuery_Projection;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery_Projection::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery.Projection)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  fields_.Clear();
  _internal_metadata_.Clear();
}

bool StructuredQuery_Projection::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery.Projection)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // repeated .google.firestore.v1beta1.StructuredQuery.FieldReference fields = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_fields()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery.Projection)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery.Projection)
  return false;
#undef DO_
}

void StructuredQuery_Projection::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery.Projection)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .google.firestore.v1beta1.StructuredQuery.FieldReference fields = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->fields_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, this->fields(static_cast<int>(i)), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery.Projection)
}

::google::protobuf::uint8* StructuredQuery_Projection::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery.Projection)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .google.firestore.v1beta1.StructuredQuery.FieldReference fields = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->fields_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->fields(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery.Projection)
  return target;
}

size_t StructuredQuery_Projection::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery.Projection)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.firestore.v1beta1.StructuredQuery.FieldReference fields = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->fields_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->fields(static_cast<int>(i)));
    }
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery_Projection::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery.Projection)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery_Projection* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery_Projection>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery.Projection)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery.Projection)
    MergeFrom(*source);
  }
}

void StructuredQuery_Projection::MergeFrom(const StructuredQuery_Projection& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery.Projection)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  fields_.MergeFrom(from.fields_);
}

void StructuredQuery_Projection::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery.Projection)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery_Projection::CopyFrom(const StructuredQuery_Projection& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery.Projection)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery_Projection::IsInitialized() const {
  return true;
}

void StructuredQuery_Projection::Swap(StructuredQuery_Projection* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery_Projection::InternalSwap(StructuredQuery_Projection* other) {
  using std::swap;
  fields_.InternalSwap(&other->fields_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery_Projection::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void StructuredQuery::InitAsDefaultInstance() {
  ::google::firestore::v1beta1::_StructuredQuery_default_instance_._instance.get_mutable()->select_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_Projection*>(
      ::google::firestore::v1beta1::StructuredQuery_Projection::internal_default_instance());
  ::google::firestore::v1beta1::_StructuredQuery_default_instance_._instance.get_mutable()->where_ = const_cast< ::google::firestore::v1beta1::StructuredQuery_Filter*>(
      ::google::firestore::v1beta1::StructuredQuery_Filter::internal_default_instance());
  ::google::firestore::v1beta1::_StructuredQuery_default_instance_._instance.get_mutable()->start_at_ = const_cast< ::google::firestore::v1beta1::Cursor*>(
      ::google::firestore::v1beta1::Cursor::internal_default_instance());
  ::google::firestore::v1beta1::_StructuredQuery_default_instance_._instance.get_mutable()->end_at_ = const_cast< ::google::firestore::v1beta1::Cursor*>(
      ::google::firestore::v1beta1::Cursor::internal_default_instance());
  ::google::firestore::v1beta1::_StructuredQuery_default_instance_._instance.get_mutable()->limit_ = const_cast< ::google::protobuf::Int32Value*>(
      ::google::protobuf::Int32Value::internal_default_instance());
}
void StructuredQuery::clear_limit() {
  if (GetArenaNoVirtual() == NULL && limit_ != NULL) {
    delete limit_;
  }
  limit_ = NULL;
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int StructuredQuery::kSelectFieldNumber;
const int StructuredQuery::kFromFieldNumber;
const int StructuredQuery::kWhereFieldNumber;
const int StructuredQuery::kOrderByFieldNumber;
const int StructuredQuery::kStartAtFieldNumber;
const int StructuredQuery::kEndAtFieldNumber;
const int StructuredQuery::kOffsetFieldNumber;
const int StructuredQuery::kLimitFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

StructuredQuery::StructuredQuery()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.StructuredQuery)
}
StructuredQuery::StructuredQuery(const StructuredQuery& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      from_(from.from_),
      order_by_(from.order_by_),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_select()) {
    select_ = new ::google::firestore::v1beta1::StructuredQuery_Projection(*from.select_);
  } else {
    select_ = NULL;
  }
  if (from.has_where()) {
    where_ = new ::google::firestore::v1beta1::StructuredQuery_Filter(*from.where_);
  } else {
    where_ = NULL;
  }
  if (from.has_limit()) {
    limit_ = new ::google::protobuf::Int32Value(*from.limit_);
  } else {
    limit_ = NULL;
  }
  if (from.has_start_at()) {
    start_at_ = new ::google::firestore::v1beta1::Cursor(*from.start_at_);
  } else {
    start_at_ = NULL;
  }
  if (from.has_end_at()) {
    end_at_ = new ::google::firestore::v1beta1::Cursor(*from.end_at_);
  } else {
    end_at_ = NULL;
  }
  offset_ = from.offset_;
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.StructuredQuery)
}

void StructuredQuery::SharedCtor() {
  ::memset(&select_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&offset_) -
      reinterpret_cast<char*>(&select_)) + sizeof(offset_));
  _cached_size_ = 0;
}

StructuredQuery::~StructuredQuery() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.StructuredQuery)
  SharedDtor();
}

void StructuredQuery::SharedDtor() {
  if (this != internal_default_instance()) delete select_;
  if (this != internal_default_instance()) delete where_;
  if (this != internal_default_instance()) delete limit_;
  if (this != internal_default_instance()) delete start_at_;
  if (this != internal_default_instance()) delete end_at_;
}

void StructuredQuery::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* StructuredQuery::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const StructuredQuery& StructuredQuery::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsStructuredQuery();
  return *internal_default_instance();
}

StructuredQuery* StructuredQuery::New(::google::protobuf::Arena* arena) const {
  StructuredQuery* n = new StructuredQuery;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void StructuredQuery::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.StructuredQuery)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  from_.Clear();
  order_by_.Clear();
  if (GetArenaNoVirtual() == NULL && select_ != NULL) {
    delete select_;
  }
  select_ = NULL;
  if (GetArenaNoVirtual() == NULL && where_ != NULL) {
    delete where_;
  }
  where_ = NULL;
  if (GetArenaNoVirtual() == NULL && limit_ != NULL) {
    delete limit_;
  }
  limit_ = NULL;
  if (GetArenaNoVirtual() == NULL && start_at_ != NULL) {
    delete start_at_;
  }
  start_at_ = NULL;
  if (GetArenaNoVirtual() == NULL && end_at_ != NULL) {
    delete end_at_;
  }
  end_at_ = NULL;
  offset_ = 0;
  _internal_metadata_.Clear();
}

bool StructuredQuery::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.StructuredQuery)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .google.firestore.v1beta1.StructuredQuery.Projection select = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_select()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.firestore.v1beta1.StructuredQuery.CollectionSelector from = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_from()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.StructuredQuery.Filter where = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_where()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .google.firestore.v1beta1.StructuredQuery.Order order_by = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_order_by()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.protobuf.Int32Value limit = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_limit()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // int32 offset = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(48u /* 48 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &offset_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.Cursor start_at = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_start_at()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .google.firestore.v1beta1.Cursor end_at = 8;
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_end_at()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.StructuredQuery)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.StructuredQuery)
  return false;
#undef DO_
}

void StructuredQuery::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.StructuredQuery)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.Projection select = 1;
  if (this->has_select()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, *this->select_, output);
  }

  // repeated .google.firestore.v1beta1.StructuredQuery.CollectionSelector from = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->from_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, this->from(static_cast<int>(i)), output);
  }

  // .google.firestore.v1beta1.StructuredQuery.Filter where = 3;
  if (this->has_where()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      3, *this->where_, output);
  }

  // repeated .google.firestore.v1beta1.StructuredQuery.Order order_by = 4;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->order_by_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      4, this->order_by(static_cast<int>(i)), output);
  }

  // .google.protobuf.Int32Value limit = 5;
  if (this->has_limit()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      5, *this->limit_, output);
  }

  // int32 offset = 6;
  if (this->offset() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->offset(), output);
  }

  // .google.firestore.v1beta1.Cursor start_at = 7;
  if (this->has_start_at()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      7, *this->start_at_, output);
  }

  // .google.firestore.v1beta1.Cursor end_at = 8;
  if (this->has_end_at()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      8, *this->end_at_, output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.StructuredQuery)
}

::google::protobuf::uint8* StructuredQuery::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.StructuredQuery)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .google.firestore.v1beta1.StructuredQuery.Projection select = 1;
  if (this->has_select()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, *this->select_, deterministic, target);
  }

  // repeated .google.firestore.v1beta1.StructuredQuery.CollectionSelector from = 2;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->from_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->from(static_cast<int>(i)), deterministic, target);
  }

  // .google.firestore.v1beta1.StructuredQuery.Filter where = 3;
  if (this->has_where()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        3, *this->where_, deterministic, target);
  }

  // repeated .google.firestore.v1beta1.StructuredQuery.Order order_by = 4;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->order_by_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        4, this->order_by(static_cast<int>(i)), deterministic, target);
  }

  // .google.protobuf.Int32Value limit = 5;
  if (this->has_limit()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        5, *this->limit_, deterministic, target);
  }

  // int32 offset = 6;
  if (this->offset() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(6, this->offset(), target);
  }

  // .google.firestore.v1beta1.Cursor start_at = 7;
  if (this->has_start_at()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        7, *this->start_at_, deterministic, target);
  }

  // .google.firestore.v1beta1.Cursor end_at = 8;
  if (this->has_end_at()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        8, *this->end_at_, deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.StructuredQuery)
  return target;
}

size_t StructuredQuery::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.StructuredQuery)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.firestore.v1beta1.StructuredQuery.CollectionSelector from = 2;
  {
    unsigned int count = static_cast<unsigned int>(this->from_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->from(static_cast<int>(i)));
    }
  }

  // repeated .google.firestore.v1beta1.StructuredQuery.Order order_by = 4;
  {
    unsigned int count = static_cast<unsigned int>(this->order_by_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->order_by(static_cast<int>(i)));
    }
  }

  // .google.firestore.v1beta1.StructuredQuery.Projection select = 1;
  if (this->has_select()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->select_);
  }

  // .google.firestore.v1beta1.StructuredQuery.Filter where = 3;
  if (this->has_where()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->where_);
  }

  // .google.protobuf.Int32Value limit = 5;
  if (this->has_limit()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->limit_);
  }

  // .google.firestore.v1beta1.Cursor start_at = 7;
  if (this->has_start_at()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->start_at_);
  }

  // .google.firestore.v1beta1.Cursor end_at = 8;
  if (this->has_end_at()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *this->end_at_);
  }

  // int32 offset = 6;
  if (this->offset() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->offset());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void StructuredQuery::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.StructuredQuery)
  GOOGLE_DCHECK_NE(&from, this);
  const StructuredQuery* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const StructuredQuery>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.StructuredQuery)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.StructuredQuery)
    MergeFrom(*source);
  }
}

void StructuredQuery::MergeFrom(const StructuredQuery& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.StructuredQuery)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  from_.MergeFrom(from.from_);
  order_by_.MergeFrom(from.order_by_);
  if (from.has_select()) {
    mutable_select()->::google::firestore::v1beta1::StructuredQuery_Projection::MergeFrom(from.select());
  }
  if (from.has_where()) {
    mutable_where()->::google::firestore::v1beta1::StructuredQuery_Filter::MergeFrom(from.where());
  }
  if (from.has_limit()) {
    mutable_limit()->::google::protobuf::Int32Value::MergeFrom(from.limit());
  }
  if (from.has_start_at()) {
    mutable_start_at()->::google::firestore::v1beta1::Cursor::MergeFrom(from.start_at());
  }
  if (from.has_end_at()) {
    mutable_end_at()->::google::firestore::v1beta1::Cursor::MergeFrom(from.end_at());
  }
  if (from.offset() != 0) {
    set_offset(from.offset());
  }
}

void StructuredQuery::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.StructuredQuery)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void StructuredQuery::CopyFrom(const StructuredQuery& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.StructuredQuery)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool StructuredQuery::IsInitialized() const {
  return true;
}

void StructuredQuery::Swap(StructuredQuery* other) {
  if (other == this) return;
  InternalSwap(other);
}
void StructuredQuery::InternalSwap(StructuredQuery* other) {
  using std::swap;
  from_.InternalSwap(&other->from_);
  order_by_.InternalSwap(&other->order_by_);
  swap(select_, other->select_);
  swap(where_, other->where_);
  swap(limit_, other->limit_);
  swap(start_at_, other->start_at_);
  swap(end_at_, other->end_at_);
  swap(offset_, other->offset_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata StructuredQuery::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void Cursor::InitAsDefaultInstance() {
}
void Cursor::clear_values() {
  values_.Clear();
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int Cursor::kValuesFieldNumber;
const int Cursor::kBeforeFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

Cursor::Cursor()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) {
    ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsCursor();
  }
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1beta1.Cursor)
}
Cursor::Cursor(const Cursor& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      values_(from.values_),
      _cached_size_(0) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  before_ = from.before_;
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1beta1.Cursor)
}

void Cursor::SharedCtor() {
  before_ = false;
  _cached_size_ = 0;
}

Cursor::~Cursor() {
  // @@protoc_insertion_point(destructor:google.firestore.v1beta1.Cursor)
  SharedDtor();
}

void Cursor::SharedDtor() {
}

void Cursor::SetCachedSize(int size) const {
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
}
const ::google::protobuf::Descriptor* Cursor::descriptor() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const Cursor& Cursor::default_instance() {
  ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::InitDefaultsCursor();
  return *internal_default_instance();
}

Cursor* Cursor::New(::google::protobuf::Arena* arena) const {
  Cursor* n = new Cursor;
  if (arena != NULL) {
    arena->Own(n);
  }
  return n;
}

void Cursor::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1beta1.Cursor)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  values_.Clear();
  before_ = false;
  _internal_metadata_.Clear();
}

bool Cursor::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:google.firestore.v1beta1.Cursor)
  for (;;) {
    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // repeated .google.firestore.v1beta1.Value values = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_values()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // bool before = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &before_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:google.firestore.v1beta1.Cursor)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:google.firestore.v1beta1.Cursor)
  return false;
#undef DO_
}

void Cursor::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:google.firestore.v1beta1.Cursor)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .google.firestore.v1beta1.Value values = 1;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->values_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->values(static_cast<int>(i)), output);
  }

  // bool before = 2;
  if (this->before() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(2, this->before(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:google.firestore.v1beta1.Cursor)
}

::google::protobuf::uint8* Cursor::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1beta1.Cursor)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .google.firestore.v1beta1.Value values = 1;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->values_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->values(static_cast<int>(i)), deterministic, target);
  }

  // bool before = 2;
  if (this->before() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(2, this->before(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1beta1.Cursor)
  return target;
}

size_t Cursor::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1beta1.Cursor)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .google.firestore.v1beta1.Value values = 1;
  {
    unsigned int count = static_cast<unsigned int>(this->values_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->values(static_cast<int>(i)));
    }
  }

  // bool before = 2;
  if (this->before() != 0) {
    total_size += 1 + 1;
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
  _cached_size_ = cached_size;
  GOOGLE_SAFE_CONCURRENT_WRITES_END();
  return total_size;
}

void Cursor::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1beta1.Cursor)
  GOOGLE_DCHECK_NE(&from, this);
  const Cursor* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const Cursor>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1beta1.Cursor)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1beta1.Cursor)
    MergeFrom(*source);
  }
}

void Cursor::MergeFrom(const Cursor& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1beta1.Cursor)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  values_.MergeFrom(from.values_);
  if (from.before() != 0) {
    set_before(from.before());
  }
}

void Cursor::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1beta1.Cursor)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Cursor::CopyFrom(const Cursor& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1beta1.Cursor)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Cursor::IsInitialized() const {
  return true;
}

void Cursor::Swap(Cursor* other) {
  if (other == this) return;
  InternalSwap(other);
}
void Cursor::InternalSwap(Cursor* other) {
  using std::swap;
  values_.InternalSwap(&other->values_);
  swap(before_, other->before_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(_cached_size_, other->_cached_size_);
}

::google::protobuf::Metadata Cursor::GetMetadata() const {
  protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2ffirestore_2fv1beta1_2fquery_2eproto::file_level_metadata[kIndexInFileMessages];
}


// @@protoc_insertion_point(namespace_scope)
}  // namespace v1beta1
}  // namespace firestore
}  // namespace google

// @@protoc_insertion_point(global_scope)
